package com.cy.stores.controller;

import com.cy.stores.service.ex.*;
import com.cy.stores.util.JsonResult;
import org.springframework.dao.DuplicateKeyException;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.servlet.http.HttpSession;
import java.rmi.ServerException;
@Controller
@ResponseBody
public class BaseController {
//    @ExceptionHandler注解用于统一处理方法抛出的异常。
//    当我们使用这个注解时，需要定义一个异常的处理方法，再给这个方法加上@ExceptionHandler注解，
//    这个方法就会处理类中其他方法（被@RequestMapping注解）抛出的异常。@ExceptionHandler注解中可以添加参数，
//    参数是某个异常类的class，代表这个方法专门处理该类异常。
    public static final int OK = 200;
    //@ExceptionHandler用于统一处理方法抛出的异常
    //当前项目产生了异常，被统一拦截到此方法中，这个方法此时就充当的是请求处理方法，方法的返回值直接给到前端
    @ExceptionHandler(ServiceException.class)
    public JsonResult<Void> handleException(Throwable e) {
        JsonResult<Void> result = new JsonResult<>(e);
        if (e instanceof UsernameDuplicateException) {
            result.setState(4000);
            result.setMessage("用户名已被占用");
        } else if (e instanceof UserNotFoundException) {
            result.setState(4001);
            result.setMessage("插入数据不存在");
        } else if (e instanceof PasswordNotMatchException) {
            result.setState(4002);
            result.setMessage("用户名或密码错误的异常");
        }else if (e instanceof InsertException) {
            result.setState(5000);
            result.setMessage("插入异常");
        }

        return result;
    }

    //在session中存 username和uid
    protected final Integer getUidFromSession(HttpSession session) {
        return Integer.valueOf(session.getAttribute("uid").toString());
    }
    protected final String getUserNameFromSession(HttpSession session) {
        return session.getAttribute("username").toString();
    }

}
